use std::io::{self, File, fs};
use core::{Package,Manifest,SourceId};
-use util::{self, CargoResult, human, Config};
+use util::{self, CargoResult, human, Config, ChainError};
use util::important_paths::find_project_manifest_exact;
use util::toml::{Layout, project_layout};
config: &Config)
-> CargoResult<(Manifest, Vec<Path>)> {
let root = layout.root.clone();
- util::toml::to_manifest(contents, source_id, layout, config).map_err(|e| {
- human(format!("failed to parse manifest at `{:?}`\n{}",
- root.join("Cargo.toml"), e))
+ util::toml::to_manifest(contents, source_id, layout, config).chain_error(|| {
+ human(format!("failed to parse manifest at `{:?}`",
+ root.join("Cargo.toml")))
})
}
use rustc_serialize::json;
use curl;
-use toml::Error as TomlError;
-use url;
use git2;
+use toml;
+use url;
pub type CargoResult<T> = Result<T, Box<CargoError>>;
json::DecoderError,
curl::ErrCode,
CliError,
- TomlError,
+ toml::Error,
url::ParseError,
+ toml::DecodeError,
}
impl<E: Error> FromError<Human<E>> for Box<CargoError> {
impl CargoError for curl::ErrCode {}
impl CargoError for ProcessError {}
impl CargoError for CliError {}
-impl CargoError for TomlError {}
+impl CargoError for toml::Error {}
+impl CargoError for toml::DecodeError {}
impl CargoError for url::ParseError {}
// =============================================================================
}));
let root = try!(parse(contents, &manifest));
let mut d = toml::Decoder::new(toml::Value::Table(root));
- let toml_manifest: TomlManifest = match Decodable::decode(&mut d) {
- Ok(t) => t,
- Err(e) => return Err(human(format!("{} is not a valid \
- manifest\n\n{}",
- manifest.display(), e)))
- };
+ let toml_manifest: TomlManifest = try!(Decodable::decode(&mut d));
- let pair = try!(toml_manifest.to_manifest(source_id, &layout, config).map_err(|err| {
- human(format!("{} is not a valid manifest\n\n{}",
- manifest.display(), err))
- }));
+ let pair = try!(toml_manifest.to_manifest(source_id, &layout, config));
let (mut manifest, paths) = pair;
match d.toml {
Some(ref toml) => add_unused_keys(&mut manifest, toml, "".to_string()),
assert_that(foo.cargo_process("build").arg("-v"),
execs().with_status(0));
});
+
+test!(invalid_global_config {
+ let foo = project("foo")
+ .file("Cargo.toml", r#"
+ [package]
+ name = "foo"
+ version = "0.0.0"
+ authors = []
+
+ [dependencies]
+ foo = "0.1.0"
+ "#)
+ .file(".cargo/config", "4")
+ .file("src/lib.rs", "");
+
+ assert_that(foo.cargo_process("build").arg("-v"),
+ execs().with_status(101).with_stderr("\
+failed to parse manifest at `[..]Cargo.toml`
+
+Caused by:
+ Couldn't load Cargo configuration
+
+Caused by:
+ could not parse TOML configuration in `[..]config`
+
+Caused by:
+ could not parse input as TOML
+[..]config:2:1 expected `=`, but found eof
+
+"));
+});